-4

我有桌子;类别、主题和等级。

Category -> id, name, desc; 
Subject -> id, name, desc, category_id; 
Grade -> id, name, desc, subject_id.

我还有另一张桌子,价格。目前是

Price -> id, amount, category_id.

是的,价格已添加到类别,但新要求是,价格可以添加到任何级别,即类别、主题或等级。

我知道一种通过将其余外键添加到价格表来解决它的方法,如 -> id、amount、category_id、subject_id、grade_id。然后将它们留空而不是相关表。

我不知道,这是更好的解决方案,我喜欢创建完美的数据库模式。请建议我替代更好的解决方案。

我使用 MySQL 和 PHP。

4

1 回答 1

2

解决方案 1:为每个表添加价格数字字段

我会说一种解决方案是直接向您的三个表中的每一个添加一个金额字段,并省去关系。任何没有价格的对象都将具有零价格。

方案二:创建三个价格关系表

您可以创建三个表:

CategoryPrice -> Category_ID, Price
SubjectPrice -> Subject_ID, Price
GradePrice -> Grade_ID, Price

对于三个原始表中没有价格的行,您可以省略价格关系表中的条目。

解决方案 3:创建超类型以与价格表连接

您可以创建一个名为“Object”的超类型表,该表将具有唯一 ID。所有类别、科目和成绩都将按对象的子类型,因此共享相同的 ID。

因此,您可以使用价格表中的 Object_ID 将价格分配给对象。

于 2013-06-14T19:02:28.797 回答