将数据存储在不方便的表中或创建派生表?

时间:2012-09-28 08:37:23

标签: php propel

我有一个我坚持使用的预定义数据库结构。问题是这个结构对于ORM是否正常,或者我是否应该添加一个处理层,每次将某些内容插入原始数据库时都会创建一个更方便的结构。

为简化起见,这就是它的样子。

我有个人表:

PersonId
Name

我有一个属性表:

PersonId
PropertyType
PropertyValue

所以,对于John Doe来说......

(1, 'John Doe')

......我可以有三个属性:

(1, 'phone', '555-55-55'),
(1, 'email', 'user@company.com),
(1, 'type', 'employee')

通过使用ORM,我希望得到一个“人”对象,其中包含“name”,“phone”,“email”,“type”属性。

Propel能做到吗?效率如何?创建一个包含“phone”,“email”,“type”列的表并在新行插入属性表时自动填充它是否更好?

2 个答案:

答案 0 :(得分:0)

我认为你应该看看ExtraProperties behavior。它基本上允许您为对象定义一组属性并轻松获取/设置它们。您的示例描述了额外属性的确切用例:具有某些属性(电话,电子邮件,类型)的主对象(Person)。

答案 1 :(得分:0)

为了性能,我最终为所有属性创建了一个包含列的表,如下所示:

PersonId
Name
Phone
Email
Type

使用这样的数据:

1
'John Doe'
'555-55-55'
'user@company.com'
'employee'