是否可以在 oracle 表中使多个列组合起来唯一?

问题描述

这个问题可能不太好理解。

我创建了两个表 - 电影(FILMAS)和电影院(ZALES)。它们之间的关系是 M:M,因此创建了会话表(SEANSI)来链接它们。

是否可以确保在同一日期和时间在一个电影院内不能有两个不同的会议?怎么样?

Oracle 18c XE 数据库

from sklearn.tree import DecisionTreeRegressor
dtree = DecisionTreeRegressor(max_depth=5,min_samples_leaf =4,random_state=7)
dtree.fit(X_train,y_train)
y_preds = dtree.predict(X_test)

calculate_metrics(y_test,y_preds)

y = pd.DataFrame(y_test)
X = pd.DataFrame(y_preds)

dfy = y.assign(label = 'y')
dfX = X.assign(label = 'X')

# assign column names that match
dfy.columns=['days','label']
dfX.columns=['days','label']

result = pd.concat([dfy,dfX],axis=0)
result

解决方法

是(日期,时间,ID_z)的唯一约束

CREATE TABLE SEANSI(
    SDATUMS DATE NOT NULL,LAIKS TIME NOT NULL,ID_F INTEGER,ID_Z INTEGER,VALODA VARCHAR(2) DEFAULT 'LATVIESU' NOT NULL,CONSTRAINT FM_VAL CHECK (VALODA IN ('LATVIESU','KRIEVU','ANGLU')),CONSTRAINT SAITE_S_FM FOREIGN KEY (ID_F) REFERENCES FILMAS(F_ID),CONSTRAINT SAITE_S_ZL FOREIGN KEY (ID_Z) REFERENCES ZALES(Z_ID),CONSTRAINT UQ_SEANSI UNIQUE (SDATUMS,LAIKS,ID_z) -- here
);
,

是否可以确保在同一日期和时间在一个电影院内不能有两个不同的会议?怎么样?

您需要唯一约束(或索引)。你可以用表格声明这一点:

CREATE TABLE SEANSI(
    SDATUMS DATE NOT NULL,CONSTRAINT UNQ_SEANSI_SDATUMS_LAIK_IDZ UNIQUE (SDATUMS,LAIK,ID_Z)
);

约束保证每个日期/时间和 zales 有一行 - 所以,一部电影。

,

您可以在这四列上创建唯一约束。此约束将强制组合为您想要的唯一。

ALTER TABLE SEANSI
  add CONSTRAINT SEANSI_unique UNIQUE (SDATUMS,ID_F,ID_Z );

或者,如果您想在创建表时创建约束,则:

CREATE TABLE SEANSI(
    SDATUMS DATE NOT NULL,CONSTRAINT SEANSI_unique UNIQUE (SDATUMS,ID_Z )
);