212 個のテーブルを持つデータベースを最適化する必要があります。1 つのテーブルの主キーは、94 個のテーブルの外部キーとして機能します。たとえば、次のテーブルがあります。
create table CUSTOMER (
CUSTOMER_ID BIGINT NOT NULL,
CUSTOMER_NAME VARCHAR(255) NOT NULL UNIQUE,
CONTACT_PERSON VARCHAR(255) NOT NULL,
CUSTOMER_EMAIL VARCHAR(255) NOT NULL,
ADDRESS VARCHAR(255),
CITY VARCHAR(255),
PHONE VARCHAR(255),
FAX VARCHAR(255),
constraint CUSTOMER_PK PRIMARY KEY (CUSTOMER_ID)
);
ここでCUSTOMER_ID
は、94 個のテーブルの外部キーである参照として機能しています。例として 1 つのテーブルを次に示します。
create table CUSTOMER_STATUS (
CUSTOMER_DETAILS_ID BIGINT NOT NULL,
CUSTOMER_ID BIGINT NOT NULL,
USER_ID BIGINT NOT NULL,
TRIAL_PERIOD BIGINT NOT NULL,
TRIAL_PERIOD_TYPE BIGINT NOT NULL,
EXPIRY_DATE BIGINT NOT NULL,
MAXIMUM_CLIENTS BIGINT NOT NULL,
STATUS BIGINT NOT NULL,
AUTO_AUTHORIZATION BIGINT NOT NULL,
constraint CUSTOMER_STATUS_PK PRIMARY KEY (CUSTOMER_ID,CUSTOMER_DETAILS_ID),
constraint CUSTOMER_STATUS_FK1 FOREIGN KEY (CUSTOMER_ID) references CUSTOMER(CUSTOMER_ID)
);
CUSTOMER_ID
すべてのテーブルのデータ型を からBIGINT
に変更する必要がありTINYINT
ますが、外部キー制約のためにエラーが発生します。
エラー:
mysql> alter table CUSTOMER MODIFY CUSTOMER_ID TINYINT;
ERROR 1025 (HY000): Error on rename of '.\uds7\#sql-670_cdd' to '.\uds7\customer' (errno: 150)
テーブル データに影響を与えずに変更するにはどうすればよいですか?