我们至少有50个对象(例如:city
,country
,color
,personelType
,organizationType
等等...我们的应用程序包含相同的属性。这些属性包含:ID
,Topic
,Code
,isActive
BaseInfo
和BaseHeader
。Base-Header
的表和另一个称为Base-Info
的表。这些表的关系是:https://pasteboard.co/GQeV4Rl.png 现在,如果需要,开发人员会在Base-Header
中添加新记录。例如,开发人员会看到Base-Header
,如果city
表中没有记录,则为城市对象添加一条记录:insert into Base-Header (id, topic) values (1, 'city');
或颜色为insert into Base-Header (id, topic) values (2, 'color');
。在此之后,所有开发人员都知道城市记录headerId
中Base-Info
字段的值为1
,并且可以在应用程序中对此ID进行硬编码以获取城市数据。在我们的应用程序中具有相同状态的其他对象。
使用此计划,我们不需要为具有相同属性的city
,color
等创建表和对象。需要城市记录的其他表的所有外键,都附有Base-Info
表。这种表和对象的设计是否正确?
非常感谢...
答案 0 :(得分:1)
我没有解决你的实际问题。但我可以建议你为上述问题设计数据库。如果它们不经常变化,您可以对对象列表(城市,国家,颜色,pesonnelType等)进行枚举,否则您可以将所有上述对象与id一起存储在单个表中。并在base-info表中添加一列来存储相应对象的id。因此,您最新的base-info表将有一个额外的列object-id
。我认为你的问题会以这种方式解决..
答案 1 :(得分:1)
听起来你正试图在这里采用EAV类型的方法。它不适合RDBMS。不是设计方面,不是性能方面,不是可用性方面。
如果BaseHeader
的唯一目的是为实体提供类型,那么它并不是真正必要的。正如Lawakush指出的那样,您也可以使用enum
字段(如果数据库支持它,否则您可以模拟它)而不是单独的表。
如果您要使用EAV模型,则会收到警告。你可以建模"任何东西都可能看起来很棒,但你最终会得到一大堆无法维护的垃圾,由于数据库中缺乏适当的保护措施而导致数据被破坏:外键不能使用'在EAV模型中工作得很好。
答案 2 :(得分:-2)
您需要至少3-6个月来首先分析业务需求。一旦到位,它将变得很方便。正如我在您的陈述中所注意到的那样,业务分析师似乎没有对其进行审核。你需要从BA的角度来看这个,所以一旦编译和总结,它将在技术角度清楚地进行数据仓库。