【发布时间】:2012-11-13 15:09:52
【问题描述】:
我有一个用于存储动物信息的数据结构。数据类型(列)取决于动物类型,只有少数是常见的。可以有许多具有不同特征集的动物类型(一种类型可以实现一个或多个特征集)。
我想要实现的是:
可以基于现有特征集创建新的动物类型,而无需稍后修改数据结构
可以简单地选择有关具有已知 animal_id 的动物或所有具有已知类型的动物的数据
拥有数据控件(以确保对于动物类型“狗”不允许插入数据,例如关于 fly_animal 的数据)
尽可能保持简单和愚蠢(当然现在我可以编写一些存储过程并在“插入之前”触发以确保所有数据都正确,但也许有更优雅的方式?)
现有数据结构:
桌子:动物
animal_id(主键)
动物名称
动物年龄
animal_type(animal_types 表中的外键)
示例数据行:
1, '雷克斯', 3, 2
表格: animal_types
animal_type_id : int(主键)
animal_type_name : 字符
-- 以下是功能集:
house_animal:布尔值
flying_animal : 布尔值
wild_animal:布尔值
示例数据行:
1,'野鹦鹉',假,真,真
2,“狗”,真,假,假
现在每个功能集都实现为表格,例如:
桌子: house_animal
animal_id(动物表中的外键)
最喜欢的食物
last_vet_visit_date
桌子:会飞的动物
animal_id(动物表中的外键)
length_of_wings
最大速度
等等
当前的数据结构让事情变得太复杂了。
你可以问我为什么不做一个包含所有可能列的大表和一个字典表 与动物类型。我当然可以,但这使得数据控制几乎不可能,以及如何 定义一个只允许某些列的新类型..?
为什么我不为每种新类型创建一个表呢?因为我不想拥有例如200 每个表只有几行。
有什么想法吗?
DBMS 是 PostgreSQL 版本 9.1。
【问题讨论】:
-
您能告诉我们更多关于如何使用这个数据集,以及什么样的应用程序会维护和访问它吗?
标签: database postgresql