0

我对以下数据库设计有要求。

将有一个名为 DEVICE 的所有设备的表和一个名为 ROOM 的房间表。每个设备必须分配给另一个设备或房间。目前,对于字段名称 Device.RoomId,我有一个可空的外键关系连接设备到 Room,而另一个可空的外键关系将设备连接回自身以获取 Device.ContainerId。

是否有更合适的设计可以通过数据库约束/fk 关系来实施?我意识到应该编写好的代码来防止存储坏数据,但我希望增加 db 执行规则的安全性。

4

1 回答 1

2

听起来不错,但如果您还没有,您可以添加一个检查约束以确保其中一个父母是NOT NULL.

考虑以下伪代码。

CREATE TABLE Device (
    DeviceId int NOT NULL PRIMARY KEY,
    Name string NOT NULL UNIQUE,
    ParentDeviceId int NULL FOREIGN KEY Device (DeviceId),
    ParentRoomId int NULL FOREIGN KEY Room (RoomId),
    CHECK (
        (
            ParentDeviceId IS NULL
                AND ParentRoomId IS NOT NULL
        ) OR (
            ParentDeviceId IS NOT NULL
                AND ParentRoomId IS NULL
        )
    )
)

CREATE TABLE Room (
    Room Id int NOT NULL PRIMARY KEY,
    Name string NOT NULL UNIQUE
)
于 2013-05-30T16:13:26.080 回答