# Fremdschlüssel aus 2 Tabellen generieren



## susanne_knapp (6. Sep 2022)

Hallo, ich habe leider wenig Erfahrung in der Softwareentwicklung und muss für mein Studium ein Projekt abschließen. Es geht um folgende Situation: Wir müssen eine Datenbank für einen e-Commerce Shop aufstellen. Die Produkte werden entweder über einen Paketdienstzusteller (Parcel) oder Auslieferungspartner (Distributor) zugestellt, was in der Bestellliste angezeigt werden muss. Es existieren bereits 2 Tabellen mit allen Attributen zu den Paketdienstzustellern sowie Auslieferungspartnern. Meine Frage lautet wie es möglich ist, in der Bestellliste unter Shipping_ID auf beide Tabellen zuzugreifen, sodass in der Spalte Shipping_ID entweder der Primary Key der Tabelle Parcel oder der Tabelle Distributor angezeigt wird. Ist es überhaupt möglich einen Foreign Key zu erstellen, der auf den Primary Key aus 2 verschiedenen Tabellen zugreift und entweder das eine, oder andere anzeigt? 

Folgenden Code habe ich bereits zum Erstellen der Tabelle:

```
create table Orders (
Orders_ID varchar(255),
Customer_ID varchar(255),
Employee_ID varchar(255),
Product_ID varchar(255),
Shipping_ID varchar(255),
Quantity int,
Order_date date,
Order_weight decimal(7,2),
Status varchar(255),
Cost decimal(7,2),
Discount varchar(255),
Total_cost decimal(7,2),


constraint PK_Orders primary key(Orders_ID),
constraint FK_CustomerOrders foreign key (Product_ID) references Customer(Customer_ID),
constraint FK_EmployeeOrders foreign key (Employee_ID) references Employee(Employee_ID),
constraint FK_ProductOrders foreign key (Product_ID) references Product(Product_ID),

    //hier gehört die Verknüpfung zu den Tabellen Parcel und Distributor, welche den korrekten Primary Key über Shipping_ID ausgibt 
);
```

die Idee ist, dass in der Spalte Shipping_ID entweder PA1, PA2, PA3,.. oder DI1, DI2, DI3,.. angezeigt wird


----------



## httpdigest (6. Sep 2022)

Possible to do a MySQL foreign key to one of two possible tables?
					

Well here's my problem I have three tables; regions, countries, states.  Countries can be inside of regions, states can be inside of regions.  Regions are the top of the food chain.  Now I'm adding a




					stackoverflow.com
				





> There's no way to model Polymorphic Associations using SQL constraints. A foreign key constraint always references *one* target table.
> 
> Polymorphic Associations are supported by frameworks such as Rails and Hibernate. But they explicitly say that you must disable SQL constraints to use this feature.


----------



## dünner (7. Sep 2022)

Die xor Relation (1:n) geht entweder mit einer check constraint oder mit einer supertype table:


```
alter table `Orders` add constraint chk_Zusteller
    check (Parcel is not null xor Distributor is null);
```

(beide dürfen nicht null sein und beide dürfen nicht nicht-null sein, also genau was du willst)









						Two foreign keys, one of them not NULL: How to solve this in SQL?
					

I have got a table time. A time entry (1:n relationship) either belongs to a project entry or to a special_work entry. Either the project id or the special_work id must be set, neither both (exclus...




					stackoverflow.com


----------

