将多个ID存储到一个表列中是不好的做法

时间:2011-08-19 18:31:20

标签: database database-design

我正在开发一个项目,其中数据库有一些表,其中包含一个存储来自多个表的id的type_id字段

例如:

id | table_type | table id
==============================
1    ADDRESS      1
2    ADDRESS      2
3    CITY         1
4    CITY         2
4    ADDRESS      3
5    COUNTRY      1

table_id字段包含Addresses表中的id,或Cities表或Countries表

我只是想知道这是不是很好的设计。或者我应该尽可能避免这种情况?

此表用于获取用户输入的所有位置。

3 个答案:

答案 0 :(得分:3)

答案是:

它取决于。

如果您提供的示例表名为Location,并且您正在使用它来实现类型继承,那么AddressCityCountry是特定类型的Location,那么这个设计就可以了。在这种情况下,您的主键将位于Location表中,其他每个表都将具有Location的外键。如果这不是你如何使用它,那么这不是一个正确规范化的数据库设计。

答案 1 :(得分:0)

这似乎是一个令人困惑的设计。如果您的表AddressCityCountry都有自己的id字段,那么引用它们的表应使用类似Address_id的列名,{分别为{1}}和City_id

您当前的设计试图过于通用。它一定会让你以后遇到麻烦。

答案 2 :(得分:0)

看,如果您可以使用您拥有的值制作密钥。

在这种情况下,您可以将table_typetable id组合成主/唯一密钥。

虽然如果table_type只能是少数值中的一个,可能会将类型保存为enum