|
Standardization of names of database objects
|
|
|
|
|
Monday, 02 June 2008
|
1. Vocabulary An entity is a set of data consistent with common characteristics (PERSON VEHICLE ...) A relationship (or association) is a means to connect, often by a two or more entities (person LEADS vehicle) An attribute is a property or characteristic qualifying entity (personne.SEXE, vehicule.IMMATRICULATION). It has a name and type of data One area is the set of values that may take attribute. (Sex = [MAN, WOMAN]) The cardinality is the number of possible links of a relationship (person drives 0 or 1 vehicle, person owns the vehicle or N 0) An ID is an attribute or an attribute together to identify a single instance of an entity (No social security 1600475112335 can identify a single person) A foreign key is an attribute of a relationship which refers to the key relationship to another: so that we can link several relations 2. Consideration general 2.1. Modeling tool Any database will be modeled by an external tool to target the product: ♦a conceptual model (logic model) and physical (organization of data) ♦the choice of diverse and numerous targets RDBMS ♦using a method known and widespread as MERISE, E / R or UML Here is a list of several solutions modelling workshop: | DataBase Design Studio of Chile Source Software | http://www.chillisource.com/ | | DeZign for DataBases of Datanamic | http://www.datanamic.com/ | | ERWin Computer Associates | http://www3.ca.com/Solutions/Product.asp?ID=260 | | Next Mega Mega International | http://www.mega.com/ | | PowerDesigner of PowerSoft (formerly AMC Designor *) | http://www.sybase.com/products/enterprisemodeling/powerdesigner | | Win'Design of Cecima | http://www.win-design.com/en/index.htm | | xCase of Resolution | http://www.xcase.co.il/ | | DataArchitect of theKOMPANYcom | http://www.thekompany.com/products/dataarchitect/ | | Rational Rose Rational Software | http://www.rational.com/ | | Studio Case 2 of CharonWare | http://www.casestudio.fr | | ER Studio Embarcadero | http://www.embarcadero.com/ | | Microsoft Visio (ex infomodeler of Synactics) | http://www.microsoft.com/office/visio/ | | Silverrun Magna solutions | http://www.silverrun.com/ | | System Architect of Popkin | http://www.popkin.com/products/sa2001/systemarchitect.htm | | Designer 2000 Oracle (mono base) | http://www.oracle.com/ (???) | | Casewise | http://www.casewise.com/ | | QuickUML Excel (Windows and Linux) Excel Software | http://excelsoftware.com/quickumllinuxnews100.html | | MacA & D / WinA & D Excel Software | http://excelsoftware.com/richdatamodel.html | | Select from Aonix | http://www.aonix.com/ | The heavyweights are: Power Designer (ex Designor AMC), ER Win, and Rational Rose. Finally, for information, here are some links on the methods and modeling tools of all kinds: ♦http://www.cs.queensu.ca/Software-Engineering/toolcat.html ♦http://www.aisintl.com/ 2.2. Standardization The models will be required to meet the first three normal forms (1NF, 2NF, 3NF). Wherever possible we will abide by the normal forms of Boyce Codd (BCNF) and the 4th and 5th normal forms provided that it does not further disadvantage for writing motions and treatments that benefit. Reminders: 1NF First normal form | A relationship is in first normal form if and only if: -- Any attribute contains an atomic value. * Each entity must have an identifier that characterizes uniquely). | 2NF Second normal form | A relationship is in second normal form if and only if: -- It is 1NF, -- Just do not attribute to a key depends not only part that key. * The properties of an entity should not depend solely on the ID the entity and not a part of this identifier | 3NF Third normal form | A relationship is in third normal form if and only if: -- It is in 2NF, -- Just do not attribute to a key does not depend on a non-key attribute. * The properties of an entity must depend on the ID of the entity in a direct way | BCNF Standard Form BOYCE-CODD | A relationship is a normal form of BOYCE-CODD (BCNF) if and only if: -- It is in 3NF, -- And only the only functional dependencies Elementary it has are those in which a key determines an attribute. * For identifiers composed of several properties, these must not be dependent on another property of the entity. | 4NF Fourth normal form | An association is a 4FN if and only if: -- It is BCFN -- Where there is a dependency multivaluée Basic, the latter is unique. * Any relationship has a breakdown in the fourth normal form is without loss. This decomposition is not necessarily unique. | 5NF Fifth normal form | An association is a 5FN if and only if: -- It is 4FN -- And if it does not have a DJ or any dependence join is implied by key candidates R. * The fifth normal form is a generalization of the fourth form Standard that requires taking into account dependencies join induced by the knowledge of the keys to a relationship | There is additional information on the forms to normal following URL. ♦http://philippe.guezelou.free.fr/mcd/mcd.htm ♦http://www.bd.enst.fr/polyv7/chap5.htm ♦http://tcosnuau.free.fr/COURS/MODREL/MODREL.HTM 3. Naming objects The names of objects of a model or a scheme should be meaningful and relevant. They will be consitue only following characters: [.. z] + [A .. Z] + [0 .. 9] + [_] With the following restrictions: ♦not to exceed 128 characters ♦does not start with a figure ♦can have several characters "White stressed" immediately ♦breakage does not matter ♦the name should not be a word reserved SQL (see this topic: THE WORDS OF KEY SQL) ATTENTION: In other words, accented letters (e a u I E ...), "Yale" (ç œ ...), punctuation (,,:? ...) And other special characters, as white, are prohibited. Examples: | _TOTO | Allowed | | 123TOTO | Prohibited | | TITI__TATA | Prohibited | | _toto | Authorized (but identical to the first) | | Truth | Prohibited | CAUTION: We reserve the names in the tiny logic models and the names capitalized physical models. Example: | customer | logical name (for example entity) | | T_CLIENT_CLI | physical name (for example table) | and their length should take into account limits the number of characters used in the names of objects RDBMS and variables of the programming language internal RDBMS (triggers and stored procedures). 3.1. Name a server The name of a server must begin with the prefix SRV_ followed by a relevant indication. Examples: | SRV_GESTION | for a database server management | | SRV_FO | for a server "front office" | 3.2. The name of a database The name of a database must begin with the prefix BD_ followed by a relevant indication. Examples: | BD_GESCOM | Database GEStion COMmerciale | | BD_SUIVIPROD | Database MONITORING of PRODuction | 3.3. Fields A field must always begin with the prefix D_ followed by a letter indicating the type of family among the following: | D_A_ | Area family string | | D_B_ | Area family binary | | D_N_ | Area family digital | | D_T_ | Area family time | It must be followed by a name indicating its use. Examples: | D_N_POURCENT | Real between 0.0 and 100.0 | | D_N_ID | Digital identification integer | | D_A_ADRESSE | Channel character varchar (32) | | D_T_ | D_B_BOOLEEN | Boolean The best was from a list of default domain that one takes systematically for each base. For example: CREATE DOMAIN D_A_ADRESSE as VARCHAR (32) CREATE DOMAIN D_A_CAR as CHAR (1) CREATE DOMAIN D_A_CODE as CHAR (8) CREATE DOMAIN D_A_CODE_COURT as CHAR (4) CREATE DOMAIN D_A_CODE_LONG as CHAR (16) CREATE DOMAIN D_A_CODE_POSTAL as CHAR (8) CREATE DOMAIN D_A_LIB as VARCHAR (32) CREATE DOMAIN D_A_LIB_COURT as VARCHAR (16) CREATE DOMAIN D_A_LIB_FIXE_COURT as CHAR (32) CREATE DOMAIN D_A_LIB_FIXE_LONG as CHAR (64) CREATE DOMAIN D_A_LIB_LONG as VARCHAR (64) CREATE DOMAIN D_A_MAIL as VARCHAR (128) CREATE DOMAIN D_A_NOM as CHAR (32) CREATE DOMAIN D_A_PRENOM as VARCHAR (32) CREATE DOMAIN D_A_TEL as CHAR (20) CREATE DOMAIN D_A_TEXTE as VARCHAR (2000) CREATE DOMAIN as TXT D_A_TEXTE_BLOB CREATE DOMAIN D_A_TEXTE_COURT as VARCHAR (1000) CREATE DOMAIN D_A_TEXTE_LONG as VARCHAR (4000) CREATE DOMAIN D_A_TITRE as VARCHAR (128) CREATE DOMAIN D_A_TITRE_COURT as VARCHAR (64) CREATE DOMAIN D_A_TITRE_LONG as VARCHAR (256) CREATE DOMAIN D_A_VILLE as CHAR (32) CREATE DOMAIN D_A_TRIGRAMME as CHAR (3) CREATE DOMAIN D_B_BOOLEEN as ILO (1) CREATE DOMAIN D_B_CODE_COULEUR VARBINARY (6) CREATE DOMAIN D_N_DECIMAL as DECIMAL (16.2) CREATE DOMAIN D_N_FLOAT as FLOAT CREATE DOMAIN D_N_INT_COURT as SMALLINT CREATE DOMAIN D_N_INT_LONG as INTEGER CREATE DOMAIN D_N_NID as INTEGER VALUES> 0 CREATE DOMAIN D_N_POURCENT as FLOAT VALUES BETWEEN 100 AND 0 CREATE DOMAIN D_T_DATE as DATE CREATE DOMAIN D_T_DATEHEURE as DATE CREATE DOMAIN D_T_HEURE as TIME 3.4. Name an entity It must begin with a prefix: | e_ | when it comes to functional entity | | er_ | when it comes to reference entity | | es_ | when entity "system" | ATTENTION: The use of the plural should be avoided. Examples: | e_client | functional entity clients | | er_pays | reference entity countries | | es_user | entity system users | 3.5. The name of a relationship (association) It must begin with the prefix A: Example: | r_loue | relationship "rent" between entity e_client and e_maison | | r_achete | e_client relationship between buys and e_maison | 3.6. Name an attribute The name of an attribute must be relevant enough to be able to understand the nature of the type of data it represents. Example: | name | attribute name | | date_naissance | attribute date of birth | | quantite | attribute quantity | To the extent possible, avoid overly generic names. So it should be outlawed: "number", "date", "type" ... 3.7. The name of a table, a view It must begin with a prefix: | T_ | where it is a functional table | V_ | | TR_ | where it is a reference table | VR_ | | TS_ | when it comes to a table "system" | VS_ | | TJ_ | where it is a join table | VJ_ | | TG_ | where it is a generic table (inheritance) | VG_ | It must return the body by the name of the entity, where a default (join table) the name of the relationship if the latter is appointed. It must be suffixed with a trigram unique within the database, permattant the rapid identification of the table. Examples: | T_CLIENT_CLI | table functional customers | | TR_PAYS_PAY | reference table of countries | | TS_USER_USR | table system users | | TJ_ACHETE_ACH | join table relationship "purchased" | A view will be prefixed by systematically V_. 3.8. Name, order of creation and size of columns 3.8.1. Order of creation ♦The order of creation and description of columns must meet the following rules: ♦The columns of the most significant and most used will be located at the top of the description ♦Columns less frequently altered or accessed will be located at the end of the description ♦Columns primary key component of the table will be the first described columns of the table ♦The columns component Foreign Keys will be as follows ♦The columns are grouped together when they are part of a significant subset of the table 3.8.2. Names The column names will be prefixed by the trigram of the original table and resume the name attribute. Example: | CLI_NOM | column table name T_CLIENT | | CLI_DATE_NAISSANCE | dnaissance date column of the table T_CLIENT | | FAC_DATE_EMISSION | column issue date of the invoice table | Some commonly used abbreviation will be used: | ID | ID (usually key auto incremented) | | NUM | number | | REF | Reference | | CODE | code, coding, coding | | LIB | wording | | DSB | order | | CP | postcode | | ADR | address | | FAX | fax | | MAIL | e-mail | | TEL | phone | | GSM | mobile phone | | LOG | "login" | | PWD | "password" | | NBR | number | | QTY | quantity | | POS | position | | NDX | index | | MNT | amount | | TX | rate | | PCT | percentage | | PUTC | unit price Taxes | | PUHT | unit price excluding taxes | 3.8.3. Sizes data columns In principle the size (and the data format) will be free, and must follow the specification of the application. However, for some fields limits are as follows: ♦The name of a person 36 characters ♦First name of a person 32 characters ♦Name a town 32 characters ♦Address line 32 characters, 4 lines (normalization THE POST) ♦City 32 characters (normalization THE POST) ♦Title of a person 5 characters (abbreviations: "Mr." - "Mrs." - "Miss" - "Me" Master - "Dr." Doctor, etc. ...) ♦3 characters country code (international code) NOTE: there will be systematic search formats consolidations International (ISO), French codifications (AFNOR standards) and consolidations by branches of occupations (such as standards and IRIS NOEMIE international regime, M21 instruction for health public).
NOTE, WITH RESPECT TO ADDRESS: formats given are those of the French postal service. It should be adhered to in all cases. The Post admits up to 4 lines addresses + a row for the postcode accompanied by the name of the city. In addition, the address must be preceded in principle on behalf of the person and / or the name of the organization (ste., association, union…). Otherwise, shipments in number could not be read by machines and the economy unrealized amounts in thousands of euros. TIP: in relation to address it is important to specify the cedex in a box "from" in order to facilitate the development of queries on cities. Thus a good formalization of address should respond to the following description: | CLI_ADR1 | VARCHAR (32) | | CLI_ADR2 | VARCHAR (32) | | CLI_ADR3 | VARCHAR (32) | | CLI_ADR4 | VARCHAR (32) | | CLI_VILLE | VARCHAR (32) | | CLI_CP | VARCHAR (8) - to accept foreign CP | | CLI_CEDEX | VARCHAR (32) | | CLI_PAYS | VARCHAR (3) - international codification | 3.9. Constraints table Constraints table will be prefixed C_ followed by an indicator of the type of constraint. They will be suffixées by the trigram table. Indicator type of constraint: | C_PK_ | forced to table "primary key" | | C_FK_ | forced to table "foreign key" | | C_UNI_ | forced to table "uniqueness" | | C_CHK_ | forced to table "validity" | ♦The constraints of primary key must resume the trigram of the original table ♦Foreign key to resume the trigram of the original table and the table in which they appear ♦The constraints of uniqueness and validity must have a meaningful name Examples: | C_PK_CLI | primary key constraint on the table score | | C_FK_FAC_CLI | foreign key constraint on the table bill on the table score | | C_UNI_LOGIN_PASSWORD_CLI | constraint of uniqueness for columns LOGIN and PASSWORD | | C_CHK_CP_CLI | forced validity of a postal code | 3.10. Index The index should be prefixed X_ followed an indicator of the nature of the index and a meaningful name. They will be suffixees by the trigram table. They may choose as an indicator of nature, one of the following abbreviations: | X_CSR_ | clustered index | | X_BMP_ | index "bitmap" | | X_BTR_ | index tree balanced | | X_HCG_ | index, "key hash" | Examples: | X_CSR_ID_CLI | clusterise index of customer indentifiant | | X_BTR_NOM_PRENOM_CLI | index tree balanced to name / first name of client | | X_HCG_TEL_CLI | key index to hash phones score | 3.11. Stored Stored procedures will be prefixed by SP_ followed by a meaningful name. Example: | SP_CALC_TARIF | stored procedure for calculating rates | 4. Documentation, ergonomics, and writing The rules below establish how developers to write applications and code related to the objects of a database. 4.1. Scripture queries Each clause will be indented query: MAUVAIS !!! SELECT CLI_ID, CLI_NOM,CLI_ENSEIGNE, CLI_PRENOM FROM T_CLIENT WHERE CLI_ADR_PAYS = 'F' AND CLI_ENSEIGNE IS NULL OR CLI_ENSEIGNE ='' ORDER BY CLI_NOM | BON !!! SELECT CLI_ID,CLI_NOM,CLI_ENSEIGNE, CLI_PRENOM FROM T_CLIENT WHERE CLI_ADR_PAYS = 'F' AND CLI_ENSEIGNE IS NULL OR CLI_ENSEIGNE ='' ORDER BY CLI_NOM | All columns returned will be appointed: MAUVAIS !!! SELECT CLI_ID, CLI_PRENOM || ' ' || CLI_NOM, CLI_ENSEIGNE FROM T_CLIENT | BON !!! SELECT CLI_ID, CLI_PRENOM || ' ' || CLI_NOM AS NOM_COMPLET_CLI, CLI_ENSEIGNE FROM T_CLIENT | The names of columns returned must not include any duplication (in particular the use of the star in the SELECT clause is prohibited): MAUVAIS !!! SELECT * FROM T_CLIENT_CLI CLI INNER JOIN T_FACTURE_FAC FAC ON CLI.CLI_ID = FAC.CLI_ID WHERE CLI.CLI_ADR_PAYS = 'F' | BON !!! SELECT CLI.CLI_ID, CLI.TIT_CODE, CLI.CLI_NOM, CLI.CLI_PRENOM, CLI.CLI_ENSEIGNE, FAC.FAC_ID, FAC.PMT_CODE, FAC.FAC_DATE, FAC.FAC_PMT_DATE FROM T_CLIENT_CLI CLI INNER JOIN T_FACTURE_FAC FAC ON CLI.CLI_ID = FAC.CLI_ID WHERE CLI.CLI_ADR_PAYS = 'F' - -a one-time column CLI_ID | | | BON !!! SELECT CLI.CLI_ID AS CLI_CLI_ID, FAC.CLI_ID AS FAC_CLI_ID, CLI.TIT_CODE, CLI.CLI_NOM, CLI.CLI_PRENOM, CLI.CLI_ENSEIGNE, FAC.FAC_ID, FAC.PMT_CODE, FAC.FAC_DATE, FAC.FAC_PMT_DATE FROM T_CLIENT_CLI CLI LEFT OUTER JOIN T_FACTURE_FAC FAC ON CLI.CLI_ID = FAC.CLI_ID WHERE CLI.CLI_ADR_PAYS = 'F' -- twice column CLI_ID with two different names | 4.2. Writing code If the text editor of the code offers the possibility, we will always use a fixed spacing police as the police Courier. The code must be written exclusively in capital letters, except duress. This rule is explained in the sense that it is important in a host language to be able to distinguish between code running on the client side and sent the code and executed on the server. The renaming of the tables in requests will be using the trigram. In the presence of several instances of the same table to add a number. The different terms and clauses of queries will be indented with a withdrawal of at least 3 characters per type of item. Similarly, if the complaints contained in a turnout CASE. The joints table must always be made with the operator JOIN when it is available. Example: SELECT CLI.CLI_ID, FAC1.FAC_ID, CASE FAC1.FAC_MODE_PAIEMENT WHEN 'B' THEN 'Cheque' WHEN 'E' THEN 'Species' WHEN 'C' THEN ' card payment ELSE '' END AS FAC_MODE_PAIEMENT FROM T_CLIENT_CLI CLI INNER JOIN T_FACTURE_FAC FAC1 ON CLI.CLI_ID = FAC1.CLI_ID WHERE CLI.CLI_ADR_PAYS = 'F' GROUP BY FAC1.FAC_ID, CLI.CLI_ID HAVING SUM(FAC1.FAC_MONTANT_TTC) > (SELECT MAX(FAC2.FAC_MONTANT_TTC) FROM T_FACTURE_FAC FAC2 WHERE FAC2.CLI_ID = CLI.CLI_ID) ORDER BY CLI.CLI_ID, FAC_MODE_PAIEMENT In stored procedures, the indentation will be made: ♦for queries as reported previously ♦for blocks of code, a withdrawal for each block of at least 3 characters It will also put comments courts wisely. Example: CREATE PROCEDURE SP_DEV_SUPPRESSION @id_element integer, @recursif bit AS DECLARE @OK integer DECLARE @bg_element integer DECLARE @bd_element integer DECLARE @intervalle integer SET NOCOUNT ON -- starting transaction SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION DELETE_TREE -- verify the existence of Element SELECT @OK = count(*) FROM T_DEVELOPPEMENT_DEV WHERE DEV_ID = @id_element -- if deleted, then return without insertion with value-1 IF @OK = 0 BEGIN SELECT -1 ROLLBACK TRANSACTION DELETE_TREE RETURN END ... 4.3. Cartridge Any stored procedure, trigger or view will be fitted with a cartridge in the code. The cartridge will contain the following elements: ♦the name of the developer coded with the subject ♦the date of completion ♦A brief commentary ♦the reference of nomenclature if a nomenclature code elements has been established ♦the description of the parameters ♦if necessary, successive amendments to the code (ID encoder, date and nature) Examples: -------------------------------------------------- ----- -- ACTOR V 3 - ARBODEV - GA01 -------------------------------------------------- ----- -- Alfred DURAND - 2001-02-17 -------------------------------------------------- ----- -- Management of the tree: insertion of an elder son -- Return 0 in case of anomalies -- PARAMETERS: -- Input: -- Id Father: DEV_ID (integer) -- Output: -- Id son insere: DEV_ID (integer) -------------------------------------------------- ----- -- AMENDMENT -- 2001-05-11 # 1 - Martine DUPONT [CDM]: -- Bug when calculating dd if = df -- 2001-05-11 # 2 - Martine DUPONT [CDM]: -- Bug when calculating whether dd> df -------------------------------------------------- ----- / * =================================== * / / * MANAGEMENT OF THE TREE OF DEVELOPMENT * / / * Removal * / / * =================================== * / / * * Frederic BROUARD 20/11/2001 / / * =================================== * / / * Removal of an element or a * / / * * Subtree / / * =================================== * / / * Parameters: * / / * Id_element: integer * / / * Recursive: bit * / / * If recursive @ = 0 => * / / * Supression of an element * / / * If recursive @ = 1 => * / / * Supression of a subtree * / / * =================================== * / 4.4. Return Values To the extent possible, a procedure always return a return value as a whole to know the status of implementation of the procedure. If successful the procedure, the return value is 0. In case of problems this value will be: ♦a negative value in case of emergency (error) ♦a positive value for value limits of performance and conditions of execution unforeseen 4.5. Uses Here are some rules to use in writing applications for optimal performance: | Ill | BON | Why? | | SELECT * ... | SELECT col1, col2 ... | The RDBMS must make a major effort to find the appropriate columns. | ... col>='val1' AND col=<'val2' ... | ... col BETWEEN 'val1' AND 'val2' ... | The operator is optimized BETWEEN (otherwise what would it?) | | COUNT (Col) ... | COUNT (*) ... | Prefer the COUNT (*), the engine will dip into statistics, cost neighbour zero! | CASE col WHEN ... THEN ... ELSE ... END | COALESCE(...) ou UNION | Replace CASE by COALESCE or operations ensemblistes type UNION, whenever this is possible because the structure CASE is excessive cost. | | SELECT DISTINCT ... | SELECT ... | Avoid the key word DISTINCT when it is not an absolute necessity. The separate dedoublonner therefore requires a sort and if the results are only is time wasted. | | ... IN (1, 2, 3) ... | ... BETWEEN 1 AND 3 ... | Avoid IN BETWEEN enough when the | | ... WHERE col1 +1 = col2 +5 ... | ... WHERE col1 = col2 + 4 | Simplify expressions if possible with a single column indexed share or other operators of comparison, to activate the index. | | ... WHERE EXISTS (SELECT Col1, Col2 ... | ... WHERE EXISTS (SELECT * ... | In this case (application embedded with operators EXISTS) optimizer replaces * character is replaced by a constant appropriate | | ... WHERE EXISTS (SELECT ... | ... WHERE ... IN (SELECT ... | When this is possible, replace the operator [NOT] EXISTS by an operator [NOT] IN. | | ... WHERE col1 IN (SELECT col1 ... | ... FROM table1 t1 INNER JOIN table2 t2 ON t1.col1 = t2.col1 ... | Whenever possible replace sub queries with operator IN by joints. | | VARCHAR | CHAR | Prefer CHAR When the column of the table is loaded in research and / or that we add an index. | | NCHAR, NVARCHAR | CHAR, VARCHAR | Prefer the CHAR / VARCHAR the NCHAR / NVARCHAR when the application is not multilange. The cost of storage is divided by two. | | FLOAT | DECIMAL | For financial calculations that should not generate errors goodwill rounding. | 4.6. Documentation There will be implanted in the database, a table paermettant describe the objects of the base. Such a table, on behalf TS_DESCRIPTION_DSC may take the following form: | TS_OBJ_NAME_DSC | Object Name | | TS_OBJ_TYPE_DSC | Nature of the object (table, order, procedure, function, trigger ...) | | TS_ATB_NAME_DSC | Name of the attribute | | TS_ATB_TYPE_DSC | Type attribute (column table setting procedure or function) | | TS_ATB_ORDER_DSC | Ordinal position of the attribute | | TS_ATB_LENGTH_DSC | Length of the attribute | | TS_ATB_REQUIRED_DSC | Mandatory | | TS_DESCRIPTION_DSC | Description of the object (to users) | | TS_OBSERVATION_DSC | Annotation of the object (for developers and administrators) | | TS_ACCESS_RULE_DSC | Rule of access (for example, bit combination: 1 users, 2 administrators, 4: developers, 8: project leaders ...) | | TS_APPLICATION_DSC | Rules for use by client applications (for example, bit combination: 1: paid, 2: accounting, 4: commercial, 8: ...) |
|
|
|