擅长:python、mysql、java
<p>我在关系数据库中看到了两种建模方法:</p>
<ol>
<li><p><strong>关系表</p>
<pre><code>CREATE TABLE address_assignment (
person_id integer REFERENCES person,
org_id text REFERENCES org,
address_id integer NOT NULL REFERENCES address,
CHECK (person_id IS NULL AND org_id IS NOT NULL
OR person_id IS NOT NULL AND org_id IS NULL),
UNIQUE (person_id, org_id, address_id)
);
</code></pre>
<p>如果不同的实体可以共享一个地址,这个模型将特别有用。</p></li>
<li><p>“穷人的超类”</strong></p>
<p>创建一个表,为person和organization实现一个超类,可能包含所有公共属性:</p>
<pre><code>CREATE TABLE located_entity (
locent_id INTEGER PRIMARY KEY,
name text NOT NULL
);
</code></pre>
<p><code>person</code>和<code>org</code>都获得了<code>located_entity</code>的外键,您还可以通过将<code>located_entity</code>的外键添加到<code>address</code>来实现与<code>address</code>的关系。你知道吗</p>
<p>如果您通常按地址而不是按人查找人的地址,则可以考虑在<code>located_entity</code>和<code>person</code>之间添加外键,或者在另一个方向添加<code>org</code>人的外键,其检查约束与解决方案1类似。</p></li>
</ol>