/// 导出一个函数，这个函数是模块的主要接口，它接受两个参数：
// 第一个参数是数据库对象db，它提供了与数据库进行交互的能力；
// 第二个参数是一个回调函数callback，它将在模型定义成功后被调用。
module.exports = function(db, callback) {
    // 开始使用db.define方法定义一个名为"AttributeModel"的模型。
    // 这个模型用于表示商品或产品的属性。
    db.define("AttributeModel", {
        // 以下是该模型属性的定义部分：
        
        // attr_id属性：作为主键，其类型为'serial'，表示这是一个自增的序列号。
        // key: true表明这个属性是主键，用于唯一标识每条记录。
        attr_id: {type: 'serial', key: true}, 
        
        // attr_name属性：表示属性的名称，其类型为字符串（String）。
        // 用于存储属性的描述性名称。
        attr_name: String, 
        
        // cat_id属性：表示分类ID，其类型为数字（Number）。
        // 这个属性用于将属性与特定的商品分类关联起来。
        cat_id: Number, 
        
        // attr_sel属性：表示属性的选择类型，其值为一个数组，包含"only"和"many"。
        // "only"表示该属性为唯一选择（如输入框），"many"表示该属性可以从多个选项中选择（如下拉列表或单选框）。
        attr_sel: ["only", "many"], 
        
        // attr_write属性：表示属性的写入方式，其值为一个数组，包含"manual"和"list"。
        // "manual"表示属性值需要手工录入，"list"表示属性值应从预定义的列表中选择。
        attr_write: ["manual", "list"], 
        
        // attr_vals属性：表示属性的值，其类型为字符串（String）。
        // 存储属性的实际值，可能是一个逗号分隔的字符串（对于"many"类型的属性）。
        attr_vals: String, 
        
        // delete_time属性：表示删除时间，其类型为数字（Number）。
        // 用于逻辑删除，即不真正从数据库中删除记录，而是通过设置一个删除时间来标记记录已删除。
        delete_time: Number 
    }, {
        // 以下是该模型的选项或配置的定义部分：
        
        // table选项：指定这个模型在数据库中对应的表名。
        // 在这个例子中，表名被指定为"sp_attribute"，这是数据库中存储属性信息的表的名称。
        table: "sp_attribute" 
    });
    
    // 模型定义完成。现在，我们调用之前传入的回调函数callback。
    // 由于模型定义操作通常不会返回任何结果（除非出现错误），因此这里我们传入一个空参数。
    // 回调函数可以在此处执行一些后续的逻辑处理，如初始化数据、启动服务等。
    // 但在这个例子中，回调函数可能只是被用来简单地表示模型定义过程的结束。
    return callback();
}