create table acs_sc_contracts (
    contract_id		     integer
			     constraint acs_sc_contracts_id_fk
			     references acs_objects(object_id) 
			     on delete cascade
			     constraint acs_sc_contracts_pk
			     primary key,
    contract_name	     varchar(1000)
			     constraint acs_sc_contracts_name_nn
			     not null
			     constraint acs_sc_contracts_name_un
			     unique,
    contract_desc	     text
			     constraint acs_sc_contracts_desc_nn
			     not null
);





create table acs_sc_operations (
    contract_id		      integer
			      constraint acs_sc_operations_cid_fk
			      references acs_sc_contracts(contract_id)
			      on delete cascade,
    operation_id	      integer
			      constraint acs_sc_operations_opid_fk
			      references acs_objects(object_id)
			      on delete cascade
			      constraint acs_sc_operations_pk
			      primary key,
    contract_name	      varchar(1000),
    operation_name	      varchar(100),
    operation_desc	      text
			      constraint acs_sc_operations_desc_nn
			      not null,
    operation_iscachable_p    boolean,
    operation_nargs	      integer,
    operation_inputtype_id    integer
			      constraint acs_sc_operations_intype_fk
			      references acs_sc_msg_types(msg_type_id),
    operation_outputtype_id   integer
			      constraint acs_sc_operations_outtype_fk
			      references acs_sc_msg_types(msg_type_id)
);



create table acs_sc_impls (
    impl_id		      integer
			      constraint acs_sc_impls_impl_id_fk
			      references acs_objects(object_id)
			      on delete cascade
			      constraint acs_sc_impls_impl_id_pk
			      primary key,
    impl_name		      varchar(100),
    impl_pretty_name          varchar(200),
    impl_owner_name	      varchar(1000),
    impl_contract_name	      varchar(1000)
);



create table acs_sc_impl_aliases (
    impl_id		      integer
			      constraint acs_sc_impl_aliases_impl_id_fk
			      references acs_sc_impls(impl_id)
			      on delete cascade,
    impl_name		      varchar(100),
    impl_contract_name	      varchar(1000),
    impl_operation_name	      varchar(100),
    impl_alias		      varchar(100),
    impl_pl		      varchar(100),
constraint acs_sc_impl_alias_un unique(impl_name,impl_contract_name,impl_operation_name)
);



create table acs_sc_bindings (
    contract_id		      integer
			      constraint acs_sc_bindings_contract_id_fk
			      references acs_sc_contracts(contract_id)
			      on delete cascade,
    impl_id		      integer
			      constraint acs_sc_bindings_impl_id_fk
			      references acs_sc_impls(impl_id)
			      on delete cascade
);