我有一些类似于以下表的DDL:
CREATE TABLE devices
(
device_uuid uuid NOT NULL,
manufacturer_uuid NOT NULL,
...
CONSTRAINT device_manufacturer_uuid_fkey FOREIGN_KEY (manufacturer_uuid)
REFERENCES manufacturer (manufacturer_uuid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT devices_device_uuid_key UNIQUE (device_uuid),
CONSTRAINT devices_pkey PRIMARY KEY (device_uuid)
);
我可能有不同类型的devices
,例如"外围设备","电源","图形"等
我可以采取两种方法:
在此表中添加一个简单的type
列
优点:我有一个非常简单的数据库结构。
缺点:可能会有数十万个条目,这可能会导致性能问题。 "设备列表"将定期搜索,并搜索所有这些条目,以找到类型"外围设备"每次都可能不是很好。
从上表中为每种类型继承。
这个DDL看起来类似于以下(我相信):
CREATE TABLE devicesperipherals
(
type device NOT NULL,
CONSTRAINT devicesperipherals_manufacturer_uuid_fkey FOREIGN_KEY (manufacturer_uuid)
REFERENCES manufacturer (manufacturer_uuid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT devicesperipherals_device_uuid_key UNIQUE (device_uuid)
CONSTRAINT devices_manufacturer_uuid_fkey FOREIGN_KEY (manufacturer_uuid)
REFERENCES manufacturer (manufacturer_uuid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
)
INHERITS (devices)
WITH (
OIDS=FALSE
);
优点:根据我对表继承的了解,这种方法应该有更好的性能。
缺点:数据库结构更复杂,索引需要更多空间。
在这种情况下,哪种方法首选?为什么呢?