例如,有一个类似这样的表:
create table foo(bar int identity, chk char(1) check (chk in('Y', 'N')));
Run Code Online (Sandbox Code Playgroud)
标志是否实现为 a char(1)
、 abit
或其他无关紧要。我只是希望能够强制执行它只能在单行上设置的约束。
考虑以下:
entity User
{
autoincrement uid;
string(20) name;
int privilegeLevel;
}
entity DirectLoginUser
{
inherits User;
string(20) username;
string(16) passwordHash;
}
entity OpenIdUser
{
inherits User;
//Whatever attributes OpenID needs... I don't know; this is hypothetical
}
Run Code Online (Sandbox Code Playgroud)
不同类型的用户(直接登录用户和OpenID用户)表现出IS-A关系;也就是说,这两种类型的用户都是用户。现在,有几种方法可以在 RDBMS 中表示:
方式一
CREATE TABLE Users
(
uid INTEGER AUTO_INCREMENT NOT NULL,
name VARCHAR(20) NOT NULL,
privlegeLevel INTEGER NOT NULL,
type ENUM("DirectLogin", "OpenID") NOT NULL,
username VARCHAR(20) NULL,
passwordHash VARCHAR(20) NULL,
//OpenID Attributes
PRIMARY_KEY(uid)
)
Run Code Online (Sandbox Code Playgroud)
方式二
CREATE TABLE Users
(
uid INTEGER …
Run Code Online (Sandbox Code Playgroud)