我正在开发一个存储大量测量数据的网络应用程序。
这些措施有不同的类型,如温度、流量、重量、浓度......
我目前正在尝试实现一个度量单位管理器,让应用程序的用户为每个度量选择他们想要的单位。
数据在多个表中:
Table1 : weightMeasure1 lengthMeasure1 TemperatureMeasure1
Table2 : weightMeasure2 lengthMeasure2 FlowMeasure2
Table3 : flowMeasure3
用户将能够独立地为每个度量选择他们想要的单位。所以它不会是公制/英制的选择。
所有数据都将保存在数据库中的SI 或 SI derived 单位中。因为我正在为我的应用程序使用 PHP,所以我决定使用 Zend_Measure 处理转换(在询问此 question 之后)。
如何在我的数据库中定义每个度量的单位?
如何管理用户单元偏好?
这是我迄今为止最好的解决方案:
我将创建一个属性表:
property : property_id name column unit
- property_id 是一个唯一递增的数字 (PK)
- name 是人类可读的名称(可选)
- column 是表名和列名的串联(唯一约束)。例如:
table2_lengthMeasure2
- unit 是定义数据库中属性单位的 Zend 常量字符串。例如:
SQUARE_METER
,KILOGRAM_PER_HOUR
,... Zend Framework API 中提供了更多详细信息.
我将创建一个user_property_unit 表来管理用户偏好:
user_property_unit : user_id property_id unit
- unit 是 Zend 常量字符串,定义属性在用户界面中显示时的单位。例如,它可以是
property
表的单位列中的SQUARE_METER
和user_property_unit
的单位列中的SQUARE_FOOT
>
我发现此解决方案存在的问题是:
- 使用
table name + column name
的 concat 对我来说似乎不合适...... - 如果我更改其中一个列的名称,它不会反射(reflect)在
property
表中。
感谢您的帮助!!
更新 有没有人甚至可以提供一些提示来帮助我?
最佳答案
您想要一个单独的 PROPERTIES 表和一个单独的链接表 TABLECOLUMNPROPERTY,使特定属性成为列的属性。
PROPERTIES
propid
name
unitid FK references UNITS table
TCP
(tablename,columnname) composite PK
propid
UNITS
unitid
etc etc
关于php - 使用 php + zend 测量单位的良好数据库模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4463667/