Comment puis-je insérer dans des tableaux avec les relations?
J'ai seulement fait les bases de données, sans relations, mais maintenant j'ai besoin de faire quelque chose de plus sérieux et correct.
Voici ma conception de base de données:
- Kunde = Client
- Vare = Produit
- Ordre = Ordre (Lire: je veux faire une commande)
- VareGruppe = euh..type? (Lire: Voiture, chaise, penderie, etc.)
- VareOrdre = Product_Orders
Voici mon SQL (SQLite) schéma:
CREATE TABLE Post (
Postnr INTEGER NOT NULL PRIMARY KEY,
Bynavn VARCHAR(50) NOT NULL
);
CREATE TABLE Kunde (
CPR INTEGER NOT NULL PRIMARY KEY,
Navn VARCHAR(50) NOT NULL,
Tlf INTEGER NOT NULL,
Adresse VARCHAR(50) NOT NULL,
Postnr INTEGER NOT NULL
CONSTRAINT fk_postnr_post REFERENCES Post(Postnr)
);
CREATE TABLE Varegruppe (
VGnr INTEGER PRIMARY KEY,
Typenavn VARCHAR(50) NOT NULL
);
CREATE TABLE Vare (
Vnr INTEGER PRIMARY KEY,
Navn VARCHAR(50) NOT NULL,
Pris DEC NOT NULL,
Beholdning INTEGER NOT NULL,
VGnr INTEGER NOT NULL
CONSTRAINT fk_varegruppevgnr_vgnr REFERENCES Varegruppe(VGnr)
);
CREATE TABLE Ordre (
Onr INTEGER PRIMARY KEY,
CPR INTEGER NOT NULL
CONSTRAINT fk_kundecpr_cpr REFERENCES Kunde(CPR),
Dato DATETIME NOT NULL,
SamletPris DEC NOT NULL
);
CREATE TABLE VareOrdre (
VareOrdreID INTEGER PRIMARY KEY,
Onr INTEGER NOT NULL
CONSTRAINT fk_ordrenr_onr REFERENCES Ordre(Onr),
Vnr INTEGER NOT NULL
CONSTRAINT fk_varevnr_vnr REFERENCES Vare(Vnr),
Antal INTEGER NOT NULL
);
Il devrait fonctionner correctement.
Mais je suis confus au sujet de Product_Orders
.
Comment puis-je créer une commande? Par exemple, les 2 produits à l'aide de SQL INSERT INTO
?
Je peut rien obtenir de travailler.
Jusqu'à présent:
Seulement quand j'ai insérer manuellement des produits et des données dans Product_Orders
puis ajouter ces données à Orders =
qui le rend complet. Ou l'inverse (créer un bon de commande avec 1 SQL, puis insérer manuellement des produits en Product_orders - 1
SQL pour chaque entrée)
- Avez-vous pensé à regarder dans la 3ème partie, DB outils? Je ne suis pas sûr de ce que la langue que vous utilisez, mais .NET utilise LINQ, Java utilise Hibernate / OpenJPA / beaucoup d'autres. Beaucoup de programmeurs s'éloignent de l'écriture SQL en faveur de la manipulation d'objets.
- Ouais, j'ai j'aime LINQ-to-SQL vraiment. Malheureusement, je travaille dans une équipe, et ils ne nourrissent à l'aise autour de SQL - je n'arrive pas à faire apprendre un nouvel outil quand il s'agit de bases de données
Vous devez vous connecter pour publier un commentaire.
Vous devez d'abord créer un bon de commande et insérez ensuite les produits dans le tableau Product_Orders. Cela est nécessaire parce que vous avez besoin d'une commande avec un id à l'associer avec la table Product_Orders.
Que vous devez toujours créer un enregistrement dans la clé étrangère de la table avant de pouvoir en créer un dans votre tableau. De cette façon, vous devez créer un "Post", par client, par type de produit, l'ordre et la product_order.
Essayez ceci ...
vous devez d'abord insérer un client
puis vous insérez un type
puis vous insérez un produit
puis vous ajoutez une commande
puis vous insérez un registre à l'product_orders table
Je pense que c'est ça. 🙂
Comme les clés primaires sont autoincrement, ne pas ajouter de l'insertion et de spécifier les colonnes comme ceci
Utilisation
Select @@identity
pour voir l'onr valeurJe pense que vous avez déjà le coup de ce qui doit arriver. Mais je pense que vous êtes l'obtention est de savoir comment assurer l'intégrité des données.
C'est là que les Opérations deviennent importants.
http://www.sqlteam.com/article/introduction-to-transactions
Est-il le SalesPrice (je suppose que c'est ce que SamletPris) qui est à l'origine du problème? Je peux voir que le fait d'être un problème ici. Une conception commune de la solution est d'avoir 2 tables: l'Ordre et la OrderLine. L'Ordre est un en-tête de la table, il aura de la relation de clé étrangère de la table Client, et tous les autres de haut niveau des données. Le OrderLine table a FK relations à l'Ordre de la table et de la table Produit, ainsi que la quantité, le prix unitaire, etc. qui sont uniques à une commande de l'élément de ligne. Maintenant, pour obtenir les prix de vente pour une commande, vous la somme (prix unitaire * quantité) de la OrderLine tableau de l'ordre. Le stockage de la SalesPrice pour l'ensemble de la commande est susceptible de causer de gros problèmes en bas de la ligne.
Une note juste au cas où c'est MySQL: Si vous utilisez MyISAM, le serveur MySQL ignore les clés étrangères complètement. Vous avez défini le moteur InnoDB si vous voulez tout type de l'intégrité effectivement exécutée sur la base de données de fin au lieu de juste dans votre logique. Ce n'est pas votre question, mais c'est quelque chose d'être conscient de.
fbinder eu le droit de la question 🙂