Unten sind zwei Schemas, von denen ich glaube, dass sie das gleiche Ergebnis ergeben, d. H. Die m: n-Beziehung mit der Option für einen Standard/bevorzugten Wert. Gibt es einen Grund, einen über den anderen zu benutzen?Wie modelliere ich m: n mit einem optionalen Standardwert?
Schema # 1
CREATE TABLE people (
id serial,
primary key (id)
);
CREATE TABLE names (
id serial,
first_name text not null,
last_name text not null,
primary key (id)
);
CREATE TABLE person_has_name (
person_id integer not null references people (id),
name_id integer not null references names (id),
is_default boolean not null default false,
primary key (person_id, name_id)
);
Schema # 2
CREATE TABLE people (
id serial,
default_name_id integer references names (id),
primary key (id)
);
-- this table has not changed
CREATE TABLE names (
id serial,
first_name text not null,
last_name text not null,
primary key (id)
);
CREATE TABLE person_has_name (
person_id integer not null references people (id),
name_id integer not null references names (id),
primary key (person_id, name_id)
);
sorry, die FK nicht haben sollte Eine Nicht-Null-Bedingung –
auch id hinzufügen möchten, in ersten Schema, Person_has_name würde einige Einschränkung, um sicherzustellen, gibt es nur eine Standard = True pro Person_id. Aus diesem Grund und dem Grund, den du beschreibst, favorisiere ich auch Schema # 2. –
jedoch hat Schema # 2 sein eigenes Problem, jetzt denke ich darüber nach. Soll default_name_id auch in der Tabelle person_has_name existieren? es ist möglich, dass es nicht geht. –