Ich habe keine Ahnung, warum ich eine Fehlermeldung erhalten, wenn die foreing Schlüssel in MariaDB setzenIch habe keine Ahnung, warum ich eine Fehlermeldung erhalten, wenn die foreing Schlüssel in MariaDB setzen
ich die volle Datenbank löschen, wenn es
existiertdrop database if exists proveedoresCarrito;
create database proveedoresCarrito;
use proveedoresCarrito;
Und jetzt werde ich die Tabellen
CREATE TABLE INVENTARIO (
NUMPIEZA CHAR(16) NOT NULL,
NUMBIN SMALLINT NOT NULL,
CANTDISPONIBLE SMALLINT,
FECHARECUENTO DATE,
PERIODORECUEN SMALLINT,
CANTAJUSTE SMALLINT,
CARTREORD SMALLINT,
PUNTOREORD SMALLINT);
CREATE TABLE LINPED (
NUMPEDIDO SMALLINT NOT NULL,
NUMLINEA SMALLINT NOT NULL,
NUMPIEZA CHAR(16),
PRECIOCOMPRA INTEGER,
CANTPEDIDA SMALLINT,
FECHARECEP DATE,
CANTRECIBIDA SMALLINT);
CREATE TABLE PEDIDO (
NUMPEDIDO SMALLINT NOT NULL,
NUMVEND SMALLINT,
FECHA DATE);
CREATE TABLE PIEZA (
NUMPIEZA CHAR(16) NOT NULL,
NOMPIEZA CHAR(30),
PRECIOVENT INTEGER);
CREATE TABLE PRECIOSUM (
NUMPIEZA CHAR(16) NOT NULL,
NUMVEND SMALLINT NOT NULL,
PRECIOUNIT INTEGER,
DIASSUM SMALLINT,
DESCUENTO SMALLINT);
CREATE TABLE VENDEDOR (
NUMVEND SMALLINT NOT NULL,
NOMVEND CHAR(30),
NOMBRECOMER CHAR(30),
TELEFONO CHAR(15),
CALLE CHAR(30),
CIUDAD CHAR(20),
PROVINCIA CHAR(20),
COD_POSTAL CHAR(5));
create table usuarios(
nombre SMALLINT NOT NULL,
pass CHAR(15)
);
ich die Primärschlüssel einrichten erstellen
ALTER TABLE INVENTARIO ADD CONSTRAINT CP_INVENTARIO PRIMARY KEY (NUMBIN);
ALTER TABLE LINPED ADD CONSTRAINT CP_LINPED PRIMARY KEY (NUMPEDIDO, NUMLINEA);
ALTER TABLE PEDIDO ADD CONSTRAINT CP_PEDIDO PRIMARY KEY (NUMPEDIDO);
ALTER TABLE PIEZA ADD CONSTRAINT CP_PIEZA PRIMARY KEY (NUMPIEZA);
ALTER TABLE PRECIOSUM ADD CONSTRAINT CP_PRECIOSUM PRIMARY KEY (NUMPIEZA, NUMVEND);
ALTER TABLE VENDEDOR ADD CONSTRAINT CP_VENDEDOR PRIMARY KEY (NUMVEND);
UND ENDLICH habe ich die Fremdschlüssel bis
ALTER TABLE INVENTARIO ADD CONSTRAINT CP_INVENTARIO PRIMARY KEY (NUMBIN);
ALTER TABLE LINPED ADD CONSTRAINT CP_LINPED PRIMARY KEY (NUMPEDIDO, NUMLINEA);
ALTER TABLE PEDIDO ADD CONSTRAINT CP_PEDIDO PRIMARY KEY (NUMPEDIDO);
ALTER TABLE PIEZA ADD CONSTRAINT CP_PIEZA PRIMARY KEY (NUMPIEZA);
ALTER TABLE PRECIOSUM ADD CONSTRAINT CP_PRECIOSUM PRIMARY KEY (NUMPIEZA, NUMVEND);
ALTER TABLE VENDEDOR ADD CONSTRAINT CP_VENDEDOR PRIMARY KEY (NUMVEND);
ALTER TABLE usuarios ADD CONSTRAINT CA_VENDEDOR_USUARIOS_NOMBRE FOREIGN KEY (nombre) REFERENCES VENDEDOR(NUMVEND);
ALTER TABLE usuarios ADD CONSTRAINT CA_VENDEDOR_USUARIOS_PASS FOREIGN KEY (pass) REFERENCES VENDEDOR(TELEFONO);
jedoch alle Fremdschlüssel korrekt funktionieren mit Ausnahme der letzten beiden , wenn ich das SQL-Skript ausführen bekomme ich diesen Fehler:
Fehler de SQL (1822): Konnte den Fremdschlüssel nicht hinzufügen. Fehlende Index für Einschränkung ‚CA_VENDEDOR_USUARIOS_PASS‘ in der referenzierten Tabelle ‚anzeigen‘
wenn ich die letzten zwei Fremdschlüssel fallen der Fehler verschwindet
mir jemand eine Lösung geben kann?
Vielen Dank! es ist unmöglich, einen Fremdschlüssel zu setzen, der nicht auf einen Primärschlüssel verweist, aber ich möchte nicht ALTER TABLE VENDEDOR ADD CONSTRAINT UX_telefono UNIQUE (TELEFONO); Weil dieses Feld in der Lage sein muss, sich zu wiederholen, gibt es eine Alternative zu Foreign Key? – Daniel
Fügen Sie dem Primärschlüssel des Anbieters, auf dessen Telefonnummer verwiesen wird, einen Fremdschlüssel hinzu. I.e.Ersetzen Sie die Spalte "pass" durch die Spalte "pass_vendor_id". Dann suchen Sie die Telefonnummer im Anbieter, wenn Sie es brauchen. Auf diese Weise ist es normalisierter, da Sie die Telefonnummer nicht wiederholen. –
Aber wie kann ich nachschlagen und die Telefonnummer wie ein Passwort ohne Fremdschlüssel verwenden? – Daniel